# 将遥感图像ROI的CSV文件改存为mat格式文件
# 整个实验中一律使用mat文件

import scipy.io as sio
import numpy as np
import os

def transfor(csv_file_path, mat_file_path, **options):
    """
    读取csv文件，转为矩阵，并使用mat文件格式存储
    :param csv_file_path:csv文件地址
    :param mat_file_path:mat文件地址
    :param options:参数
    :return:返回0代表成功
            返回1代表失败
    """
    # 如果不指定矩阵名称，就是用csv文件的名称
    if "matrix_name" not in options:
        _, file_name = os.path.split(csv_file_path)
        matrix_name = file_name.split(".")[0]
    else:
        matrix_name = options["matrix_name"]

    data = []
    # 读取csv文件
    with open(csv_file_path, "r") as f:
        for line in f:
            if line[0] == ";":
                continue
            splits_str = line.strip().split(" ")
            # 去除分割之后所有的空格，然后将数字转为float格式
            splits_int = list(map(lambda s: float(s), list(filter(lambda x: len(x) != 0, splits_str))))
            data.append(splits_int)
    print(len(data), len(data[0]))
    sio.savemat(mat_file_path, {matrix_name: data})
    return 0

def load_mat_test(mat_file_path):
    """
    读取生成的mat，用于测试
    默认矩阵名称就是文件名
    :param mat_file_path:mat地址
    :return: 返回0代表没有问题
    """
    raw_mat = sio.loadmat(mat_file_path)
    _, file_name = os.path.split(mat_file_path)
    matrix_name = file_name.split(".")[0]
    data = raw_mat[matrix_name]
    print(len(data), len(data[0]))
    print(data[0:100])
    return 0


def main():
    # transfor("E:\\GF2_shanghai.txt", "e:\\GF2_shanghai.mat")
    load_mat_test("e:\\GF2_shanghai.mat")

if __name__ == "__main__":
    main()